/**
 *  ES6 定义Class
 */

// 1. 定义class
class Point1 {
    constructor(x, y) {
        // super() // 通过super.fuction 执行继承的父类方法
        this.x = x
        this.y = y
        if (new.target === Point1) {
            console.log("直接通过new调用构造函数");
        } else {
            // undefined
            console.log("直接执行构造函数") // 如果是函数方式定义类，也可能是从子类中实例化
        }
    }
    // #s = 3; // 类私有属性 （提案）
    // s = 3; // 类属性 （提案）
    getPosition() {
        return `${this.x}-${this.y}`
    }
    // 静态方法
    static getClassName() {
        console.log("fun", new.target);
        return this.name
    }
}
Point1.s = 3 // 类静态属性
console.dir(Point1);
const point1 = new Point1(1, 2)
point1.getPosition()  // 调用方法
point1.constructor.getClassName()  // 调用静态方法
console.log(Point1.getClassName()) // 调用静态方法


/**
 * 用于定义(模块中)类的私有属性[js定义]
 */
const func1 = Symbol("func1")
// tslint:disable-next-line: max-classes-per-file
class JsPrivateTest {
    [func1]() {
        console.log();
    }
}